import {
  NavigateToOptionsType,
  NavigateToUrlType,
  RedirectToOptionsType,
  RedirectToUrlType,
  ReLaunchOptionsType,
  ReLaunchUrlType,
  SwitchTabOptionsType,
  SwitchTabUrlType,
} from '#/go';

/** 首页路径 */
const HOME_PATH = import.meta.env.VITE_HOME_PATH;
/** 登录页路径 */
const LOGIN_PATH = import.meta.env.VITE_LOGIN_PATH;

/** 导航至指定页面
 * ```
 * 保留当前页面，跳转到应用内的某个页面，使用 uni.navigateBack 可以返回到原页面。
 * ```
 * 文档: [http://uniapp.dcloud.io/api/router?id=navigateto](http://uniapp.dcloud.io/api/router?id=navigateto)
 * @param url 页面路径
 * @param options 选项
 */
export function navigateTo(url: NavigateToUrlType, options: NavigateToOptionsType = {}) {
  uni.navigateTo({ ...options, url });
}

/** 导航返回到上级页面
 * ```
 * 关闭当前页面，返回上一页面或多级页面。可通过 getCurrentPages() 获取当前的页面栈，决定需要返回几层。
 * ```
 * 文档: [http://uniapp.dcloud.io/api/router?id=navigateback](http://uniapp.dcloud.io/api/router?id=navigateback)
 * @param url 页面路径
 * @param options 选项
 */
export function navigateBack(options: UniNamespace.NavigateBackOptions = {}) {
  uni.navigateBack({ ...options });
}

/** 导航至主页
 * @param options 选项
 */
export function navigateToHome(options: NavigateToOptionsType = {}) {
  return navigateTo(HOME_PATH as NavigateToUrlType, options);
}

/** 导航至登录页面
 * @param options 选项
 */
export function navigateToLogin(options: NavigateToOptionsType = {}) {
  return navigateTo(LOGIN_PATH as NavigateToUrlType, options);
}

/** 重定向至指定页面
 * ```
 * 关闭当前页面，跳转到应用内的某个页面。
 * ```
 * 文档: [http://uniapp.dcloud.io/api/router?id=redirectto](http://uniapp.dcloud.io/api/router?id=redirectto)
 * @param url 页面路径
 * @param options 选项
 */
export function redirectTo(url: RedirectToUrlType, options: RedirectToOptionsType = {}) {
  uni.redirectTo({ ...options, url });
}

/** 重新启动指定页面
 * ```
 * 关闭所有页面，打开到应用内的某个页面。
 * ```
 * 文档: [http://uniapp.dcloud.io/api/router?id=relaunch](http://uniapp.dcloud.io/api/router?id=relaunch)
 * @param url 页面路径
 * @param options 选项
 */
export function reLaunch(url: ReLaunchUrlType, options: ReLaunchOptionsType = {}) {
  uni.reLaunch({ ...options, url });
}

/** 切换底部选项卡
 * ```
 * 跳转到 tabBar 页面，并关闭其他所有非 tabBar 页面。
 * ```
 * 文档: [http://uniapp.dcloud.io/api/router?id=switchtab](http://uniapp.dcloud.io/api/router?id=switchtab)
 * @param url 页面路径
 * @param options 选项
 */
export function switchTab(url: SwitchTabUrlType, options: SwitchTabOptionsType = {}) {
  uni.switchTab({ ...options, url });
}
